import { ref } from 'vue'

const ConnectData = ref({
    type: "CONNECT",
    payload: {
      "content": "Hello",
    },
    timestamp: new Date().toISOString() // 确保时间戳有实际值
  });

// 1. 创建 WebSocket 连接
const socket = new WebSocket('ws://localhost:9000/ws'); // 使用公共测试服务器

// const socket = new WebSocket('ws://192.168.46.83:9000/ws'); // 使用公共测试服务器
socket.binaryType = 'arraybuffer';

// 2. 连接打开事件
socket.addEventListener('open', () => {
    console.log('连接已建立');
    // 发送测试消息
    socket.send(JSON.stringify(ConnectData.value));

     // ✅ 定时发送心跳
    setInterval(() => {
    const heartbeatData = {
      type: "HEARTBEAT",
      payload: {},
      timestamp: new Date().toISOString()
    };
    socket.send(JSON.stringify(heartbeatData));
    console.log("发送心跳包");
    }, 30000);  // 每30秒发送一次
});

// 3. 接收消息事件
socket.addEventListener('message', (event) => {
  let fixedData = event.data.replace(/\\/g, '\\\\'); // 将 \ 替换为 \\
  const response = JSON.parse(fixedData);
  console.log('收到消息 socket.js:', event.data);

  // 检查是否为登录成功消息
  if (response.type === "登录成功") {
      // 请求在线用户列表
      const requestOnlineUsersData = {
          type: "REQUEST_ONLINE_USERS",
          payload: {},
          timestamp: new Date().toISOString()
      };
      socket.send(JSON.stringify(requestOnlineUsersData));
      console.log("请求在线用户列表");
      // 立即更新在线用户状态
      updateOnlineUsers([{
          id: response.data.id,
          name: response.data.username
      }]);
  }

  // 检查是否为在线用户列表消息
  if (response.type === "ONLINE_USERS") {
      // 更新在线用户状态
      updateOnlineUsers(response.data);
      console.log("11111")
  }

  // 处理新用户登录通知
  if (response.type === "USER_LOGIN") {
      // 重新请求在线用户列表
      socket.send(JSON.stringify(requestOnlineUsersData));
      console.log("新用户登录，重新请求在线用户列表");
  }
});

// 更新在线用户状态的函数
function updateOnlineUsers(data) {
  // 更新在线用户列表的逻辑
  console.log("在线用户列表:", data);
  // 假设有一个在线用户列表的ref
  onlineUsers.value = data;
}

// 4. 错误处理
socket.addEventListener('error', (error) => {
    console.error('连接错误:', error);
});

// 5. 连接关闭事件
socket.addEventListener('close', (event) => {
    console.log('连接已关闭，代码:', event.code);
});

// 发送消息示例
// function sendMessage(msg) {
//     if (socket.readyState === WebSocket.OPEN) {
//         // socket.send(msg);
//     } else {
//         console.warn('连接未就绪，当前状态:', socket.readyState);
//     }
// }

// 关闭连接方法
function closeConnection() {
    if (socket.readyState === WebSocket.OPEN) {
        console.log('正在关闭WebSocket连接...');
        socket.close(1000, '用户退出登录');
    }
}

// 导出socket和closeConnection方法
export { socket as default, closeConnection };
